package com.jiliang.member.controller;

import com.jiliang.common.exception.Errors;
import com.jiliang.common.result.WebResult;
import com.jiliang.member.dto.MemberInfoDTO;
import com.jiliang.member.entity.MemberInfo;
import com.jiliang.member.service.MemberInfoService;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/memberInfo")
@Slf4j
public class MemberInfoController {

    @Autowired
    private MemberInfoService memberInfoService;


    /**
     * 新增用户信息
     * @param dto
     * @return
     */
    @PostMapping(value = "/addMemberInfo")
    public WebResult addMemberInfo(@RequestBody MemberInfoDTO dto) {
        int i = memberInfoService.addMemberInfo(dto);
        if (i <= 0) {
            return WebResult.fail(Errors.SYSTEM_INSERT_ERROR.code,"用户已存在，用户新增失败");
        }
        return WebResult.success(i);
    }

    /**
     * 修改用户信息
     * @param dto
     * @return
     */

    @PostMapping("/updateMemberInfo")
    public WebResult updateMemberInfo(@RequestBody MemberInfoDTO dto) {
        if (dto.getBoId() == null) {
            return WebResult.fail(Errors.SYSTEM_UPDATE_ERROR.code,"用户id不能为空");
        }
        int i = memberInfoService.updateMemberInfo(dto);
        return WebResult.success(i);
    }

    /**
     * 冻结用户信息
     * 传入参数为用户id、冻结状态 1：正常 0：冻结
     * Todo: 冻结用户信息需要做到：1. 冻结用户的登录权限；2. 冻结用户的交易权限；3. 冻结用户的提现权限；4. 冻结用户的转账权限；5. 冻结用户的充值权限；6. 冻结用户的提币权限；7. 冻结用户的转币权限；8. 冻结用户的委托权限；9. 冻结用户的借贷权限；10. 冻结用户的债权转让权限；11. 冻结用户的债权冻结权限；12. 冻结用户的债权解冻权限；13. 冻结用户的债权提取权限；14. 冻结用户的债权归还权限
     */
    @PostMapping("/freezeMemberInfo")
    public WebResult freezeMemberInfo(@RequestBody MemberInfoDTO dto) {
        if (dto.getBoId() == null) {
            return WebResult.fail(Errors.SYSTEM_UPDATE_ERROR.code,"用户id不能为空");
        }
        int i = memberInfoService.freezeMemberInfo(dto);
        return WebResult.success(i);
    }



    /**
     * 删除用户信息
     */
    @DeleteMapping("/deleteMemberInfo")
    public WebResult deleteMemberInfo(@RequestBody MemberInfoDTO dto) {
        int i = memberInfoService.deleteMemberInfo(dto.getBoId());
        if (i > 0){
            return WebResult.success(i);
        }
        return WebResult.fail(Errors.SYSTEM_UPDATE_ERROR.code,Errors.SYSTEM_UPDATE_ERROR.msg);
    }

    /**
     * 查询用户列表
     */
    @PostMapping("/selectMemberInfoList")
    public WebResult selectMemberInfoList(@RequestBody(required = false) MemberInfoDTO dto) {
        List<MemberInfo> list = memberInfoService.selectMemberInfoList(dto);
        return WebResult.success(list);
    }

    /**
     * 分页查询用户列表
     * @param dto
     * @return
     */
    @PostMapping("/selectMemberInfoListByPage")
    public PageInfo selectMemberInfoListByPage(@RequestBody(required = false) MemberInfoDTO dto) {
        return memberInfoService.selectMemberInfoListByPage(dto);
    }

    /**
     * 查询用户详情
     * @param id
     * @return
     */
    @GetMapping("/selectMemberInfoById/{id}")
    public WebResult selectMemberInfoById(@PathVariable("id") String id) {
        MemberInfo memberInfo = memberInfoService.selectMemberInfoById(id);
        return WebResult.success(memberInfo);
    }

    //查询该公司该部门拥有此操作系统的数量
    @GetMapping("/selectMemberInfoByAccount")
    public WebResult selectMemberInfoByAccount(@RequestParam("cName") String cName, @RequestParam("dName") String dName, @RequestParam("menuId") Integer menuId) {
        int i = memberInfoService.selectCountByParams(menuId, cName, dName);
        return WebResult.success(i);
    }


    //查询用户所在公司所有部门
    @GetMapping("/selectDeptByCompany")
    public WebResult selectDeptByCompany(MemberInfo memberInfo) {
        List<Map> maps = memberInfoService.selectDeptByCompany(memberInfo);
        return WebResult.success(maps);
    }

}
